在上一篇我們學到透過在workflow內呼叫另一個workflow的方式複用workflow(reusable workflow)
這篇我們會來會來看一下另一種叫做composite actions的複用workflow的方式
這個方法尤其適合workflow中的某些step經常重複且執行順序幾乎不變時使用
composite action包含多個step,這些step在caller workflow中會被當作job下的一個step運作
它和reusable workflow有幾個差異
無法使用secret,不過可以透過input傳入secret在專案的非.github資料夾底下的地方新增action.yaml,但建議放在action(js檔)附近
metadata file 是用來定義該 composite action 的結構和屬性
大致上語法和撰寫一般workflow差不多,但因為並不是一個獨立的workflow,所以沒有on、jobs屬性
另外也是因為它不是獨立的workflow,所以在裡面使用actions/checkout的話clone的會是呼叫workflow的repo,而不是這個composite action所在的repo
name: 'Say Hello'
description: 'Today is a perfect day to day hello to everyone'
inputs:
  name:
    description: 'user name'
    required: true
  
outputs:
  reply:
    description: "How's it going with your new workflow"
    value: ${{ steps.reply-your-friend.outputs.output1 }}
runs:
  using: 'composite'
  steps:
    - name: greeting
      run: echo "Hello $INPUT_WHO_TO_GREET."
      shell: bash
      env:
        INPUT_WHO_TO_GREET: ${{ inputs.name }}
    - name: Reply question
      id: reply-your-friend
      run: |
        echo "output1=Amazing! I can composite several steps into a action." >> $GITHUB_OUTPUT
      shell: bash
然後打tag
git tag v1.0.0
# 或者
git tag -a -m "如果需要的話,可以在這打註解" v1.0.0
git push --follow-tags
不管是不是跨repo,都可以呼叫composite action
在要呼叫composite action的repo的.github/workflows底下新增<檔名>.yml即可
name: Try to use composite action
on:
  push:
    branches:
      - master
jobs:
  call_composite_action_1:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - id: trial
        uses: tempura327/try-github-actions@v1.0.1
        with:
          name: 'Jasmine'
      
      - run: |
          echo How\'s it going with your new workflow?
          echo ${{ steps.trial.outputs.reply }}
        shell: bash

另外注意一定要以<owner name>/<repo name>@<tag>去指定呼叫的composite action,不能以檔案路徑指定